package com.easylinkin.linkappapi.tenant.sevice;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.easylinkin.linkappapi.deviceunit.entity.DeviceUnit;
import com.easylinkin.linkappapi.openapi.dto.FunctionInfoDTO;
import com.easylinkin.linkappapi.openapi.dto.TenantInfoDTO;
import com.easylinkin.linkappapi.security.entity.LinkappPrivilege;
import com.easylinkin.linkappapi.security.entity.LinkappUser;
import com.easylinkin.linkappapi.tenant.dto.LinkappTenantDTO;
import com.easylinkin.linkappapi.tenant.entity.LinkappTenant;
import com.easylinkin.linkappapi.tenant.entity.TenantRefPrivilegeDTO;
import java.util.List;
import java.util.Map;
import site.morn.framework.entity.BaseUser;

/**
 * <p></p>
 *
 * @author liuming
 * @since 2020/4/14
 */
public interface LinkappTenantService extends IService<LinkappTenant>{
	
	public LinkappTenant addLinkappTenant(LinkappTenant linkappTenant);
	
	public LinkappTenant initLinkappTenant(TenantInfoDTO tenantInfoDTO);
	
	public LinkappTenant initLinkappTenantByFunction(FunctionInfoDTO functionInfoDTO);
	
	public boolean updateLinkappTenant(LinkappTenant linkappTenant);
	
	public boolean tenant2Personality(LinkappTenant linkappTenant);
	

	public List<LinkappTenant> selectLinkappTenantList(LinkappTenant linkappTenant);
	
	public IPage<LinkappTenant> selectLinkappTenantPage(Page page,LinkappTenant linkappTenant);
	
	public LinkappTenant selectLinkappTenant(LinkappTenant linkappTenant);

	String getSSOUrl(LinkappUser user);

	public String getSSOUrl(LinkappTenant linkappTenant, String account);
	
	public LinkappTenant currentTenant();
	
	List<LinkappPrivilege> selectPrivilegeByTenant(String id, Integer type);
	
	List<LinkappPrivilege> selectTenantPrivilegeByUser(String id);
	
	boolean unlockTenant(String id);

	/**
	 * 冻结租户
	 *
	 * @param id 租户id
	 * @return 操作结果
	 */
	boolean lockTenant(String id);

	void tenant2Privileges(TenantRefPrivilegeDTO tenantRefPrivilegeDTO);

    LinkappTenant getOneById(String id);

    List<DeviceUnit> selectDeviceUnitByTenant(String id);
    
    List<DeviceUnit> selectTenantDeviceUnitByUser(String id);
    
    void tenant2DeviceUnits(LinkappTenant LinkappTenant, List<DeviceUnit> deviceUnits);

	/**
	 * 获取免登录地址
	 * @param requestId
	 * @param appId
	 * @param tenantId
	 * @param id
	 * @param account
	 * @param headerSign
	 * @param appkey
	 * @return
	 */
	Map<String, String> getSSOUrl(String requestId, String appId, String tenantId, String id, String account, String headerSign, String appkey);

	/**
	 * 获取用户项目信息
	 * @param phone 手机号
	 * @return 用户tenant项目信息
	 */
  List<LinkappTenantDTO> selectUserTenantByPhone(String phone);

	/**
	 * 通过用户名获取项目信息
	 * @param user
	 * @return
	 */
  List<LinkappTenantDTO> selectUserTenantByUser(LinkappUser user);

	/**
	 * 获取最后一个有配置的租户信息
	 *
	 * @return 租户信息
	 */
	LinkappTenant getLastHasConfigOne();

	String checkUsername();

  LinkappTenant getOneByProjectId(Long projectId);

	List<LinkappTenant> selectAll();
}
